<?php
// 应用公共文件
use think\facade\Db;
/**
 * 字节数Byte转换为KB、MB、GB、TB
 * @param int $size
 * @return string
 */
function xn_file_size($size){
    $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
    for ($i = 0; $size >= 1024 && $i < 5; $i++) $size /= 1024;
    return round($size, 2) . $units[$i];
}

/**
 * 密码加密函数
 * @param $password
 * @return string
 */
function xn_encrypt($password, $salt='')
{
    if (empty($salt)) {
        $salt = 'xiaoniu_admin';
    }
    return md5(md5($password.$salt));
}

/**
 * 管理员操作日志
 * @param $remark
 */
function xn_add_admin_log($remark)
{
    $data = [
        'admin_id' => session('admin_auth.id'),
        'url' => request()->url(true),
        'ip' => request()->ip(),
        'remark' => $remark,
        'method' =>request()->method(),
        'param' => json_encode(request()->param()),
        'create_time' => time()
    ];
    \app\common\model\AdminLogModel::insert($data);
}

/**
 * 获取自定义config/cfg目录下的配置
 * 用法： xn_cfg('base') 或 xn_cfg('base.website') 不支持无限极
 * @param string|null $name
 * @param string|null $default
 * @param string|null $path
 * @return array|string
 */
function xn_cfg($name, $default='', $path='cfg')
{
    if (false === strpos($name, '.')) {
        $name = strtolower($name);
        $config  = \think\facade\Config::load($path.'/'.$name, $name);
        return $config ?? [];
    }
    $name_arr    = explode('.', $name);
    $name_arr[0] = strtolower($name_arr[0]);
    $filename = $name_arr[0];
    $config  = \think\facade\Config::load($path.'/'.$filename, $filename);
    return $config[$name_arr[1]] ?? $default;
}

/**
 * 构建图片上传HTML 单图
 * @param string $value
 * @param string $file_name
 * @param null $water 是否添加水印 null-系统配置设定 1-添加水印 0-不添加水印
 * @param null $thumb 生成缩略图，传入宽高，用英文逗号隔开，如：200,200（仅对本地存储方式生效，七牛、oss存储方式建议使用服务商提供的图片接口）
 * @return string
 */
function xn_upload_one($value,$file_name,$water=null,$thumb=null)
{
$html=<<<php
    <div class="xn-upload-box">
        <div class="t layui-col-md12 layui-col-space10">
            <input type="hidden" name="{$file_name}" class="layui-input xn-images" value="{$value}">
            <div class="layui-col-md12">
                <div type="button" class="layui-btn webuploader-container" id="{$file_name}" data-water="{$water}" data-thumb="{$thumb}" style="width: 113px;"><i class="layui-icon layui-icon-picture"></i>上传图片</div>
                <div type="button" class="layui-btn chooseImage" data-num="1"><i class="layui-icon layui-icon-table"></i>选择图片</div>
            </div>
        </div>
        <ul class="upload-ul clearfix">
            <span class="imagelist"></span>
        </ul>
        <script>$('#{$file_name}').uploadOne();</script>
    </div>
php;
    return $html;
}

/**
 * 构建图片上传HTML 多图
 * @param string $value
 * @param string $file_name
 * @param null $water 是否添加水印 null-系统配置设定 1-添加水印 0-不添加水印
 * @param null $thumb 生成缩略图，传入宽高，用英文逗号隔开，如：200,200（仅对本地存储方式生效，七牛、oss存储方式建议使用服务商提供的图片接口）
 * @return string
 */
function xn_upload_multi($value,$file_name,$water=null,$thumb=null)
{
    $html=<<<php
    <div class="xn-upload-box">
        <div class="t layui-col-md12 layui-col-space10">
            <div class="layui-col-md8">
                <input type="text" name="{$file_name}" class="layui-input xn-images" value="{$value}">
            </div>
            <div class="layui-col-md4">
                <div type="button" class="layui-btn webuploader-container" id="{$file_name}" data-water="{$water}" data-thumb="{$thumb}" style="width: 113px;"><i class="layui-icon layui-icon-picture"></i>上传图片</div>
                <div type="button" class="layui-btn chooseImage"><i class="layui-icon layui-icon-table"></i>选择图片</div>
            </div>
        </div>
        <ul class="upload-ul clearfix">
            <span class="imagelist"></span>
        </ul>
        <script>$('#{$file_name}').upload();</script>
    </div>
php;
    return $html;
}

/**
 * 错误信息 - 为API设计的返回错误信息的方法
 * @param string $msg
 * @param int $code
 * @param array $data
 */
function retError($msg = 'fail', $code = 0, $data = [])
{
    $result = [
        'msg'  => $msg,
        'code' => $code,
        'data' => $data
    ];
    $response = json($result);
    throw new \think\exception\HttpResponseException($response);
}

/**
 * 成功信息 - 为API设计的返回数据的方法
 * @param array $data
 * @param string $msg
 * @param int $code
 */
function retSuccess($data = [], $msg = 'success', $code = 1)
{
    $result = [
        'data' => $data,
        'msg'  => $msg,
        'code' => $code
    ];
    $response = json($result);
    throw new \think\exception\HttpResponseException($response);
}

/**
 * 获取省市县区
 * @param $parent_id
 * @param int $level
 * @return mixed|string
 */

function get_region($parent_id,$level=1){
    $list = Db::name('region')
        ->where('parent_id','=',$parent_id)
        ->where('level','=',$level)
        ->field('id,name,name_path')
        ->select()
        ->toArray();
    return $list;
}

/**
 * 支付方式
 * @param $type
 * @param int $use
 * @return mixed|string
 */
function get_pay_type($use=1,$type=''){

    $arr = config('self.pay_type');

    if($use==1){
        return $arr;
    }elseif($use==2){
        if(empty($type)){
            return '';
        }
        if(isset($arr[$type])){
            return "<span class='layui-btn layui-btn-xs' style='background: ".$arr[$type]['color']."'>".$arr[$type]['title']."</span>";
        }else{
            return "未知";
        }
    }else{
        if(empty($type)){
            return '';
        }
        if(isset($arr[$type])){
            return $arr[$type]['title'];
        }else{
            return "未知";
        }
    }
}


/**
 * 获取基础类型
 * @param int $use
 * @param string $type
 * @return mixed|string
 */
function get_base_type($use=1,$type=''){
    $arr = config('self.base_type');

    if($use==1){
        return $arr;
    }elseif($use==2){
        if(isset($arr[$type])){
            return  "<span class='layui-btn layui-btn-xs' style='background: ".$arr[$type]['color']."'>".$arr[$type]['title']."</span>";
        }else{
            return "未知";
        }
    }else{
        if(isset($arr[$type])){
            return $arr[$type]['title'];
        }else{
            return "未知";
        }
    }
}
/**
 * 商品活动类型
 * @param $use
 * @param $type
 * @return mixed|string
 */
function get_goods_activity_type($use=1,$type=''){
    $arr = config('self.goods_activity_type');

    if($use==1){
        return $arr;
    }elseif($use==2){
        if(isset($arr[$type])){
            return "<span class='layui-btn layui-btn-xs' style='background: ".$arr[$type]['color']."'>".$arr[$type]['title']."</span>";
        }else{
            return "未知";
        }
    }else{
        if(isset($arr[$type])){
            return $arr[$type]['title'];
        }else{
            return "未知";
        }
    }
}


/**
 * 订单列表条件
 * @param $status
 * @return array
 */
function get_order_where($status){
    $where = [];
    switch ($status){
        case 0:
            //待付款
            $where[]=['status','=',0];
            break;
        case 1:
            //待发货
            $where[]=['status','=',1];
            $where[]=['type','=',2];
            break;
        case 2:
            //待核销
            $where[]=['status','=',1];
            $where[]=['type','=',1];
            break;
        case 3:
            //收货
            $where[]=['status','=',2];
            break;
        case 4:
            //已完成
            $where[]=['status','=',3];
            break;
        case 5:
            //已取消
            $where[]=['status','=',-1];
            break;
        case 6:
            //申请退款中
            $where[]=['status','=',-2];
            break;
        case 7:
            //已退款
            $where[]=['status','=',-3];
            break;
        case 8:
            //申请换货订单
            $where[]=['status','=',-4];
            $where[]=['type','=',2];
            break;
        default:
            //默认全部
    }
    return $where;
}
/**
 * @param $time
 * @param $format
 * @return string
 * 将时间戳转换为日期格式
 */
function toDate($time, $format = 'Y-m-d H:i:s') {

    if (empty ( $time ) || $time=='') {
        return '';
    }

    if(!is_numeric($time)){
        $time = strtotime($time);
    }

    $format = str_replace ( '#', ':', $format );
    return date($format, $time);
}
/**
 * 订单状态
 * @param $order
 * @return string
 */
function get_order_status($order){

    if($order['status']==-4){
        $str = '申请换货';
        if($order['type']==2){
            if($order['old_status']>=2){
                $str .= '，已发货';
            }else{
                $str .= '，未发货';
            }
        }
    }elseif($order['status']==-3){
        $str = '已退款';

        if($order['type']==2){
            if($order['is_change']){
                $str .= '，已换货';
            }else{
                if($order['old_status']>=2){
                    $str .= '，已发货';
                }else{
                    $str .= '，未发货';
                }
            }
        }

        if($order['is_some_refund']==1){
            $use = $order['goods_num']-$order['refund_num'];
            $str .= '，已用'.$use.'次，退款'.$order['refund_num'].'次';
        }
    }elseif ($order['status']==-2){
        $str = '申请退款中';

        if($order['type']==2){
            if($order['is_change']){
                $str .= '，已换货';
            }else{
                if($order['old_status']>=2){
                    $str .= '，已发货';
                }else{
                    $str .= '，未发货';
                }
            }
        }

        if($order['is_some_refund']==1){
            $use = $order['goods_num']-$order['refund_num'];
            $str .= '，已用'.$use.'次，退款'.$order['refund_num'].'次';
        }

    }elseif ($order['status']==-1){
        $str = '已取消';
    }elseif ($order['status']==0){
        $str = '待付款';
    }elseif ($order['status']==1){
        if($order['type']==1){
            $str = '待核销';
        }else{
            $str = '待发货';
        }
    }elseif ($order['status']==2){
        $str = '待收货';
        if($order['is_change']){
            $str .= '，已换货';
        }
    }elseif ($order['status']==3){
        $str = '已完成';

        if($order['is_change']){
            $str .= '，已换货';
        }
    }else{
        $str = '未知';
    }
    return $str;
}

/**
 * 显示支付单号
 * @param $pay_type
 * @param $transaction_id
 * @return string
 */
function show_transaction_id($pay_type,$transaction_id){
    if(empty($transaction_id)){
        return '无';
    }
    if($pay_type==3){
        $transaction_id = config('self.user_money_title').'记录编号'.$transaction_id;
    }elseif ($pay_type==4){
        $transaction_id = config('self.user_coin_title').'记录编号'.$transaction_id;
    }
    return $transaction_id;
}

